package com.tedu.api.io;

import org.testng.annotations.Test;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;

/**
 * b包位置：java。io
 * File文件，文件夹类
 * 作用：用于表示操作系统中系统的一个文件或者目录：文件夹
 */

public class FileAPI {
    @Test
    public void testFile() {
       /* 创建文件类
                需求：当前API下创建--手动--demo。txt   char r='\\'


        File file = new File("D:\\javaapi\\API\\src\\main\\java\\com\\tedu\\api\\io");*/
        //相对路径--当前API下创建文件 !    项目：Maven结构   main编写代码
        //FileAPI.java   相对于     API项目下--》从src开始
        //操作系统：路径\\  代表路径     文件上传至服务器
        //            \代表路径       文件下载到本地
        //Java任何平台【操作系统】运行   统一路径属性
        //Faile.separator   静态属性：任何操作系统下转换成正确的路径表示方式
        File file = new File("src"+File.separator+"main"+""
                +File.separator+"java"+""+File.separator+"com"+""+File.separator
                +"tedu"+""+File.separator+"api"+""+File.separator+"io"+File.separator+"demo.txt"
        );
        //判断文件是否存在方法
        boolean b=file.exists();
        System.out.println("判断文件是否存在"+b);
    }
    /**
     * 查看文件或者文件夹属性信息
     * getName（）       返回值：String
     * 作用：获取文件的名字【注意：】
     * length（）        返回值：long
     * 作用：返回当前文件的大小【字节量】
     * exists（）       返回值：boolean
     * 作用：判断文件是否存在
     *
     */
    @Test
    public void testFileGL() throws IOException {
        //创建文件类--路径：maven项目--相对路径
        //相对路径： 。/  当前API项目下
        File file=new File("."+File.separator);
        //打印file 的路径
        System.out.println("打印file路径 "+file.getCanonicalPath());
        //文件是否存在
        System.out.println(""+file.exists());
        //获取文件名字
        String name=file.getName();
        System.out.println(""+name);
        long len=file.length();

        System.out.println(""+len);


    }
    /**
     * 使用代码完成文件或者目录自动创建
     * createNewFile（）
     * 作用：创建一个新文件
     * 需求：使用代码完成API 项目文件夹下 自动创建 test.txt  文件
     */
    @Test
    public void testCreate() throws IOException {
        File file=new File("."+""+File.separator+"test.txt");
        if(!file.exists()){
            System.out.println("文件不存在");
            file.createNewFile();
            System.out.println("文件已经创建");
        }else{
            System.out.println("文件存在别创建了");
        }

    }
    /**
     * delete()
     * 作用：删除文件或者文件夹
     * 需求：将API项目下的  test.txt 删除
     */
    @Test
    public void testDelete(){
        File file=new File("test.txt");
        //判断   如果文件  存在--》删除
        //                 不存在--》删除
        if(file.exists()){
            System.out.println("文件存在");
            file.delete();
            System.out.println("文件删除");
        }else{
            System.out.println("文件已经删除了");
        }
    }
    /**
     * mkdir()
     * 作用：创建一个文件夹
     * 需求：在API  项目下  创建一个文件夹 demo
     */
    @Test
    public void testMkdir(){
        //创建File文件、文件夹--》创建demo文件夹
        File file=new File("demo");
        //判断如果文件不存在--创建文件夹
        //存在--不创建
        if(!file.exists()){
            System.out.println("文件不存在");
            file.mkdir();
            System.out.println("创建文件夹");
        }else{
            System.out.println("别创建了");
        }
    }
    /**
     * 作业一：多层文件夹 demoo/abc/bcd  不能使用递归
     * 构造器 new File（File,path，“子路径”）；
     *       不需要exists判断
     *          思路：找到每一级路径【bcd删除完毕---demo】
     */
    @Test
    public void testHomeWork1(){
      //1.创建多层文件夹 demo。abc。bcd
        File parent=new File("");
        //构造器使用（父级路径，子级路径）
        File child1=new File(parent,"abc");
        File child2=new File(child1,"bcd");
        child2.delete();
        child1.delete();
        parent.delete();
       parent.listFiles(new FileFilter(){
           public boolean accept(File pathname){
               return false;
           }
       });
    }
    /**
     *访问文件夹--》所有子项【文件夹和文件】
     * ListFiles（）    返回值：File【】   文件数组
     * 作用：获取文件夹的所有子项【包含文件和文件夹】
     * isFile（）    返回值：boolean
     * 作用：判断是否为文件夹，是文件夹true，反之
     * 需求：获取API项目下所有的文件夹文字
     */
    @Test
    public void testListFiles() throws IOException {
        File file=new File("."+File.separator);
        System.out.println(file.getCanonicalFile());
        //过滤:3个文件还有四个文件夹，过滤是文件夹
        if(file.isDirectory()){
            //获取到所有文件夹
            File[] dir=file.listFiles();
            //遍历所有的文件夹名称
            for(int i=0;i<dir.length;i++){
                // i   拿到所有下标
                //打印文件夹名字
                System.out.println(dir[i].getName());
            }
        }

    }

}




























